from django import forms
from django.forms import ModelForm
from django.contrib.auth.models import User
from universidades.models import Universidad, Universidad_temp

class RegistroUnivForm(ModelForm):
	class Meta:
		model = Universidad_temp

	def is_valid(self):
		try:
			valid = super(RegistroUnivForm, self).is_valid()
			data = self.cleaned_data

			if not valid:
			    return valid
			
			if Universidad.objects.filter(url=data['url']).exists():
			    return False
		except Exception:
			return False

		return True

class RegistroUnivFormUserValid(ModelForm):
	class Meta:
		model = Universidad

	def is_valid(self):
		try:
			valid = super(RegistroUnivFormUserValid, self).is_valid()
			data = self.cleaned_data

			if not valid:
			    return valid
			
			if Universidad.objects.filter(url=data['url']).exists():
			    return False
		except Exception:
			return HttpResponse( "<h2>" + unicode( e ) + "</h2>" )
		return True

# Se define una nueva funcion para crear usuarios.
# En este formulario se ignora la necesidad de que una
# universidad este registrada para que se pueda crear
# el usuario
class RegistroUserForm(forms.Form):
	nombre = forms.CharField()
	apellido = forms.CharField()
	email = forms.EmailField()
	password = forms.CharField()
	confirmacion = forms.CharField()

	# se redefine la nueva funcion save, solo para crear un USER, no un USUARIO
	def save(self):
		data = self.cleaned_data

		user = User()
		user.first_name = data['nombre']
		user.last_name = data['apellido']
		user.email = data['email']
		user.username = user.email
		user.set_password(data['password'])
		user.is_active = False		# por defecto se envia False para que no pueda logearse
		user.save()

	def is_valid(self):
		valid = super(RegistroUserForm, self).is_valid()
		data = self.cleaned_data

		if not valid:
		    return valid
		
		if data['password'] != data['confirmacion']:
		    return False
		
		if User.objects.filter(username=data['email']).exists():
		    return False
		
		return True